#include <vector>
#include <string>

using namespace std;
class Solution
{
  public:
    /*
    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R
    And then read line by line: "PAHNAPLSIIGYIR"
    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string text, int nRows);
    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    */

    string convert(string s, int numRows)
    {
        if (numRows == 1)
            return s;

        if (s.empty())
            return "";

        auto arr = vector<string>(numRows);
        auto len = s.length();
        auto left = len;
        while (left > 0)
        {
            // vertical down
            for (auto i = 0; i < numRows && left > 0; ++i)
            {
                arr[i].push_back(s[len - left]);
                --left;
            }

            // obliquely up
            for (auto i = numRows - 2; i >= 1 && left > 0; --i)
            {
                arr[i].push_back(s[len - left]);
                --left;
            }
        }

        string ret;
        for (auto x : arr)
        {
            ret += x;
        }

        return ret;
    }
};